Spring AOP中的Advice
本文相关代码(来自官方源码spring-test模块)请参见spring-framework org.springframework.mylearntest包下。
-
Before Advice
-
After Advice
After returning
After throwing
After Advice(finally)
- After Around
Introduction
在AspectJ中称Inter-Type Declaration,在JBoss AOP中称Mix-in,都是指这同一种类型的Advice。与之前的几种Advice类型不同,Introduction不是根据横切逻辑在Joinpoint处的执行时机来区分的,而是根据它可以完成的功能而区别于其他Advice类型。
AspectJ采用静态织入的形式,那么对象在使用的时候,Introduction逻辑已经是编译织入完成的。所以理论上来说,AspectJ提供的Introduction类型的Advice,在现有Java平台上的AOP实现中是性能最好的;而像JBosss AOP或者Spring AOP等采用动态织入的AOP实现,Introduction的性能要稍逊一筹。
在Spring中,Advice按照其自身实例能否在目标对象类的所有实例中共享这一标准,可以划分为两大类,即per-class类型的Advice和per-instance类型的Advice。